Google Kubernetes Engine を使って Kubernetesクラスタを作成してみた
はじめに
おはようございます、加藤です。最近少しずつですがKubernetes(以降、k8s)を勉強し始めました。Google Kubernetes Engine(以降、GKE)を使ったクラスタの作成方法をまとめてみました。
やってみた
クラスタの作成
k8sのクラスタを作成します、先に新規プロジェクトを作成しそのプロジェクト内に作成すると、後から簡単に破棄できる為オススメです。
Google Cloud Platform のプロジェクトを作成する | MAGELLAN BLOCKS
クラスタを作成します。
デフォルトのままで作成を完了します。
名前 | 値 | 備考 |
---|---|---|
名前 | standard-cluster-1 | クラスタを識別する任意の名前 |
ロケーションタイム | ゾーン | リージョン クラスタ | Kubernetes Engine | Google Cloud |
ゾーン | us-central1-a | 検証なので地理的に遠いがusを選択 |
マスターのバージョン | 1.10.9-gke.5(デフォルト) | k8sマスターノードのバージョン |
ノードプール(default-pool)
名前 | 値 | 備考 |
---|---|---|
ノード数 | 3 | |
マシンタイプ | マシンタイプ | 任意のマシンタイプを選択(今回はvCPU x 1を選択した) |
自動アップグレード | オン |
作成が完了すると、一覧でグリーンチェックが付きます。
gcloudコマンドのインストール
この作業を行うとkubectl
が/usr/local/Caskroom/google-cloud-sdk/latest/google-cloud-sdk/bin/kubectl
に変更されます。
$ brew cask install google-cloud-sdk
~/.bash_profileに以下を追記
# gcloud source '/usr/local/Caskroom/google-cloud-sdk/latest/google-cloud-sdk/path.bash.inc' source '/usr/local/Caskroom/google-cloud-sdk/latest/google-cloud-sdk/completion.bash.inc'
kubectlのインストール
$ gcloud components update $ gcloud components install kubectl
クラスタへ接続
# gcloudのコンフィグセットを作成する $ gcloud config configurations create k8s-practice Created [k8s-practice]. Activated [k8s-practice]. # 作成したプロジェクトがActiveになっていることを確認 $ gcloud config configurations list NAME IS_ACTIVE ACCOUNT PROJECT DEFAULT_ZONE DEFAULT_REGION default False [email protected] main-223214 us-central1-a us-central1 k8s-practice True # Googleアカウントの認証 $ gcloud auth login Your browser has been opened to visit: https://accounts.google.com/o/oauth2/auth?認証用URL WARNING: `gcloud auth login` no longer writes application default credentials. If you need to use ADC, see: gcloud auth application-default --help You are now logged in as [[email protected]]. Your current project is [None]. You can change this setting by running: $ gcloud config set project PROJECT_ID # プロジェクトID・リージョン・ゾーンの設定 $ gcloud config set project k8s-practice Updated property [core/project]. $ gcloud config set compute/region us-central1 Updated property [compute/region]. $ gcloud config set compute/zone us-central1-a Updated property [compute/zone]. # 作成したプロジェクトに設定されていることを確認 $ gcloud config configurations list NAME IS_ACTIVE ACCOUNT PROJECT DEFAULT_ZONE DEFAULT_REGION default False [email protected] main-223214 us-central1-a us-central1 k8s-practice True [email protected] k8s-practice us-central1-a us-central1
デフォルトだと、k8sの設定ファイルは~/.kube/config
保存されます。
k8s環境毎に設定ファイルを分けたいので環境変数KUBECONFIG
で参照・保存先を変更します。
環境変数は作業ディレクトリに移動した時に自動でセットしたいので、direnvを使いました。複数のバージョンのkubectl
を使っている場合なども、これを使用すると簡単にパス指定ができて便利です。
同時にgcloudのコンフィグセットも選択するように設定しました。
以降の作業は任意場所に専用の作業ディレクトリを作成し、そこで行ってください。
.envrc
export KUBECONFIG=$(pwd)/.kube/config gcloud config configurations activate k8s-practice gcloud config list
k8sのコンフィグを生成します。GKEの管理画面のクラスタ一覧に接続
というボタンがあるのでクリックすると、コマンドを取得できます。
$ gcloud container clusters get-credentials standard-cluster-1 --zone us-central1-a --project k8s-practice-223214
作業ディレクトリに.kube/config
が作成されます。
クラスタに接続できるか確認してみましょう。
$ kubectl version Client Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.7", GitCommit:"0c38c362511b20a098d7cd855f1314dad92c2780", GitTreeState:"clean", BuildDate:"2018-08-20T10:09:03Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"darwin/amd64"} Server Version: version.Info{Major:"1", Minor:"10+", GitVersion:"v1.10.9-gke.5", GitCommit:"d776b4deeb3655fa4b8f4e8e7e4651d00c5f4a98", GitTreeState:"clean", BuildDate:"2018-11-08T20:33:00Z", GoVersion:"go1.9.3b4", Compiler:"gc", Platform:"linux/amd64"}
接続できました!Podの立ち上げもできるか確認してみます。
apiVersion: v1 kind: Pod metadata: name: sample-pod spec: containers: - name: nginx-container image: nginx:1.13
$ kubectl apply -f sample-pod.yaml pod "sample-pod" created $ kubectl get pods NAME READY STATUS RESTARTS AGE sample-pod 1/1 Running 0 4s $ kubectl delete -f sample-pod.yaml pod "sample-pod" deleted
Podの作成も問題ありませんでした!
あとがき
簡単にセットアップできました!今回作成した環境は、GCPの無料利用枠の範囲外、ご注意ください。
複数のk8s環境を利用している場合でも、ミスが起きにくい様に意識してセットアップしてみました。
ちなみに、書評「Kubernetes完全ガイド」Kubernetesを学ぶ全ての人にオススメしたい | DevelopersIOを読んで勉強しています!